#ifndef BASIC_COMMON_H
#define BASIC_COMMON_H

#include <iostream>
#include <typeinfo>
#include <utility>

template <typename T1, typename T2>
void print_pair(const std::pair<T1, T2>& p1) {
    std::cout << "std::pair<" << typeid(T1).name() << ", " << typeid(T2).name() << "> p1 = ("
              << p1.first << "," << p1.second << ")\n";
}

template <typename T, typename U>
void print_pair(T x, U y) {
    // since c++17 省略模板参数，自动推导，但是参数为何又不能不推导?
    // print_pair(std::pair u(x, y));
    std::pair u(x, y); // 为何模板参数省略仅能在这里成立？
    print_pair(u);
}

#endif
